\begin{Exercise}[title={For-loop},difficulty=0]
\label{ex:for-loop}
\Question \label{ex:for-loop q1} 创建一个基于~\key{for} 的简单的循环。
使其循环~10 次，并且使用~\package{fmt} 包打印出计数器的值。

\Question \label{ex:for-loop q2} 用~\key{goto} 改写~\ref{ex:for-loop q1} 的循环。
关键字~\key{for} 不可使用。

\Question \label{ex:for-loop q3} 再次改写这个循环，使其遍历一个~array，并将这个~array 打印到屏幕上。
\end{Exercise}

\begin{Answer}

\Question 有许多种解法，其中一种可能是：
\lstinputlisting[caption={循环示例},label=src:for]{ex-basics/src/for.go}
编译并观察输出。
\vskip\baselineskip
\begin{display}
\pr go build for.go
\pr ./for
0
1
.
.
.
9
\end{display}
\vskip\baselineskip

\Question 改写的循环最终看起来像这样（仅显示了~\func{main} 函数）：
\begin{lstlisting}
func main() {
        i := 0	|\coderemark{定义循环变量}|
Loop:		|\coderemark{定义标签}|
        fmt.Printf("%d\n", i)
        if i < 10 {
            i++ 
            goto Loop |\coderemark{跳转回标签}|
        }   
}
\end{lstlisting}

\Question 
下面是可能的解法之一：
\lstinputlisting[label=src:for-arr,caption={用于数组的~for 循环 },linerange={5,11}]{ex-basics/src/for-arr.go}
也可以用复合声明的硬编码来实现这个：
\begin{lstlisting}
a := [...]int{0,1,2,3,4,5,6,7,8,9} |\coderemark{让~Go 来计数}|
fmt.Printf("%v\n", a)
\end{lstlisting}
\end{Answer}
